package com.ftg.mall.service.impl;


import com.ftg.mall.base.entity.pms.ProductCategory;
import com.ftg.mall.base.util.tooltips.ResBean;
import com.ftg.mall.mapper.ProductCategoryMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ftg.mall.service.IProductCategoryService;
import com.ftg.mall.vo.ProductCategoryVo;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 产品分类 服务实现类
 * </p>
 *
 * @author 高铭泽
 * @createTime 2022/11/15
 */
@Service
public class ProductCategoryServiceImpl extends ServiceImpl<ProductCategoryMapper, ProductCategory> implements IProductCategoryService {

    @Override
    public ResBean showTreeWithCategory() {
        //调用basemapper里面的查全部方法
        List<ProductCategory> lists = this.baseMapper.selectList(null);

        List<ProductCategoryVo> tt = convertClass(lists);
        System.out.println(tt+"数据测试 ");
        return ResBean.success(tt);
    }

    private List<ProductCategoryVo> convertClass( List<ProductCategory> list){
        //最终返回结构
        List<ProductCategoryVo> result = new ArrayList<>();
//       循环所有
        for (ProductCategory productCategory : list) {
            // 查询数据里面所有parent_id为-1的
            if(productCategory.getParentId() == -1){
                //找到数据以后直接转换类型
                ProductCategoryVo temp = convertBoth(productCategory);
                //加入最终集合里
                result.add(temp);
                //找当前的parentid为-1 ProductCategory分类，然后再查找这个节点的子节点
                findSon(temp,list);
            }
        }
        return result;
    }

    /**
     * 查找list里面有没有哪个节点的 parentId等于temp id
     * @param temp  当前节点
     * @param list  所有数据
     */
    private void findSon(ProductCategoryVo temp, List<ProductCategory> list) {
        //循环
        for (ProductCategory productCategory : list) {
            //当前节点的temp的id与其它人的parentId是否相同
            if(temp.getId().equals(productCategory.getParentId())){
                if(temp.getChildren() == null){
                    temp.setChildren(new ArrayList<>());
                }
                ProductCategoryVo temp1 = convertBoth(productCategory);
                //添加到children里面
                temp.getChildren().add(temp1);
                //递归
                findSon(temp1,list);
            }
        }
    }


    private ProductCategoryVo convertBoth(ProductCategory productCategory){
        ProductCategoryVo vo = new ProductCategoryVo();
        vo.setId(productCategory.getId());
        vo.setParentId(productCategory.getParentId());
        vo.setName(productCategory.getName());
        vo.setDescription(productCategory.getDescription());
        vo.setKeywords(productCategory.getKeywords());
        vo.setIcon(productCategory.getIcon());
        vo.setLevel(productCategory.getLevel());
        vo.setNavStatus(productCategory.getNavStatus());
        vo.setProductCount(productCategory.getProductCount());
        vo.setProductUnit(productCategory.getProductUnit());
        vo.setShowStatus(productCategory.getShowStatus());
        vo.setSort(productCategory.getSort());
        return vo;
    }
}
